/**
  ******************************************************************************
  * @file    by9301.h
  * @author  ashuai0110
  * @version V2.4
  * @date    2024-09-10
  * @brief   BY9301语音播报模块驱动
  *
  ******************************************************************************
  * @attention
  *
  * 版权声明:内容为编者(ashuai0110)原创,使用请注明出处,当然,你也可以不这样做^_^
  * 出处链接:https://gitee.com/ashuai0110/mcu_reuse_development_module.git
  *
  ******************************************************************************
  */

#ifndef __BY9301_H
#define __BY9301_H

#ifdef __cplusplus
extern "C" {
#endif

/* 包含头文件-----------------------------------------------------------------*/
#include "common_include.h"

/**
 * @addtogroup devices
 * @{
 */

/**
 * @addtogroup by9301
 * @{
 */

/* 宏定义---------------------------------------------------------------------*/
/**
 * @defgroup by9301_global_macros by9301 global macros
 * @{
 */

/**
 * @defgroup by9301_play_mode by9301 play mode
 * @{
 */
#define BY9301_BUSY                         (0u) /*!< 忙时不播放 */
#define BY9301_BREAK                        (1u) /*!< 忙时打断播放 */
/**
 * @}
 */

/**
 * @defgroup by9301_play_pause by9301 play pause
 * @{
 */
#define BY9301_PAUSE                        (0u) /*!< 暂停 */
#define BY9301_PLAY                         (1u) /*!< 播放 */
/**
 * @}
 */

/**
 * @}
 */

/* 类型定义-------------------------------------------------------------------*/
/**
 * @defgroup by9301_global_types by9301 global types
 * @{
 */

/**
  * @brief  by9301 structure definition
  */
typedef struct by9301 {
    uint8_t (* ioBusyReadFn)(void); /*!< 忙端口读函数 */
    mw_rw_fn_t readFn;  /*!< 数据读函数 */
    mw_rw_fn_t writeFn; /*!< 数据写函数 */
} by9301_t;

/**
 * @}
 */

/* 全局变量-------------------------------------------------------------------*/

/* 函数原型-------------------------------------------------------------------*/
/**
 * @addtogroup by9301_global_functions
 * @{
 */

void by9301_init(by9301_t *_by9301, uint8_t (* ioBusyReadFn)(void), mw_rw_fn_t readFn, mw_rw_fn_t writeFn);

void by9301_play_with_num(by9301_t *_by9301, uint8_t num, uint8_t mode);
void by9301_set_volume(by9301_t *_by9301, uint8_t volume);
void by9301_play_pause(by9301_t *_by9301, uint8_t playPause);

/**
 * @}
 */

/**
 * @}
 */

/**
 * @}
 */

#ifdef __cplusplus
}
#endif

#endif /* by9301.h */
